跳到主要内容

Logseq Vim Shortcuts 插件发布

· 阅读需 15 分钟
Random Image
图片与正文无关

这个插件提供了一些快捷键,让 Logseq 有了类似 VIM 的操作体验。

支持的快捷键

  • j:移动到下一行。在可视块模式下,用于向下选择。
  • k:移动到上一行。在可视块模式下,用于向上选择。
  • h:将焦点移至父级。
  • l:将焦点移至子级。
  • J:移动到下一个兄弟节点。在可视块模式下,用于向下移动。
  • K:移动到上一个兄弟节点。在可视块模式下,用于向上移动。
  • H:减少缩进。
  • L:增加缩进。
  • aA:将光标移至行尾并进入编辑模式。
  • iI:将光标移至行首并进入编辑模式。
  • yy:复制当前块的内容。仅支持一个块——复制多个块请使用 cmd+c
  • Y:复制当前块的引用。
  • p:将剪贴板内容粘贴到下一个兄弟节点。仅支持一个块——粘贴多个块请使用 cmd+v
  • P:将剪贴板内容粘贴到上一个兄弟节点。仅支持一个块——粘贴多个块请使用 cmd+v
  • o:在下一个兄弟节点插入一个空块。
  • O:在上一个兄弟节点插入一个空块。
  • dd:删除当前块。子块也会被删除,但只有当前块的内容会出现在剪贴板中。
  • dj:删除当前块和下一个块。子块也会被删除,但只有当前块的内容会出现在剪贴板中。
  • dk:删除当前块和上一个块。子块也会被删除,但只有当前块的内容会出现在剪贴板中。
  • T:滚动到顶部,因为 Logseq 使用 gg 跳转到图视图。
  • G:滚动到底部。
  • u:撤销。
  • ctrl+r:重做。
  • gu:将块内容转换为小写。
  • gU:将块内容转换为大写。
  • mod+shift+u:在小写和大写之间切换块内容。
  • NUMBER+mod+shift+u:触发不同的大小写风格,支持 1–16。
  • zo:展开块。
  • zc:折叠块。
  • zO:分层展开块。
  • zC:分层折叠块。
  • NUMBER+m:将当前页面或块保存到 NUMBER 寄存器。
  • NUMBER+':在主区域加载保存的标记。
  • NUMBER+mod+':在右侧边栏加载保存的标记。
  • cmd+j cmd+j:退出编辑模式。ctrl+[ 也有相同的效果。
  • mod+alt+j:合并下一个兄弟块。
  • mod+shift+enter:跳转到内部页面或标签。
  • mod+shift+;mod+alt+;:触发命令模式。这提供了许多方便使用的命令,具体如下所述。
  • ctrl+a:增加块中第一个出现的数字。支持多选和组合操作。
  • ctrl+x:减少块中第一个出现的数字。支持多选和组合操作。
  • x:剪切开头的字符。支持多选。
  • X:剪切开头的单词。支持多选。
  • /:在下方的页面栏中触发搜索。支持智能大小写匹配。
  • n:搜索下一个匹配项。
  • N:搜索上一个匹配项。
  • sb:在百度中搜索块内容。
  • se:在维基百科中搜索块内容。
  • sg:在谷歌中搜索块内容。
  • sh:在 GitHub 中搜索块内容。
  • ss:在 Stackoverflow 中搜索块内容。
  • sy:在 Youtube 中搜索块内容。
  • ctrl+v:切换可视块模式。
  • mod+/:触发表情符号选择界面。

模式

普通模式

一个块被聚焦/高亮。

插入模式

你可以编辑一个块。

可视块模式

你可以向上和向下选择更多块,并使用 jk 移动选中的块。

命令模式

在 VIM 中,这个模式可以通过 : 触发,但在这里,快捷键是 mod+shift+;,也可以记作 mod+:。触发后,你可以在底部找到一个输入区域,就像在 VIM 中一样输入一些命令。目前大约有 10 多个命令,但相信未来会有更多。

注意:在 Windows 上,触发键是 ctrl+alt+;

底部输入框功能

  • 输入时提供自动建议。
  • 如果只有一个命令匹配,按下 Tab 将立即自动完成匹配的命令。
  • 按下 UpDown 浏览命令历史记录,这是一个限制为 1000 条的历史记录,我认为这已经足够使用了。
  • 按下 Esc 关闭命令模式并返回主窗口。目前 Logseq 有时无法自动获取焦点,因此你需要点击主窗口以继续操作。
  • 如果遇到卡顿,右下角的 Run 按钮和 Close 按钮可以帮助你触发操作。

支持的命令

  • :NUMBER:滚动到特定行,或者 :-NUMBER 滚动到页面末尾的特定行,或者 :.NUMBER 表示滚动到页面的 NUMBER * 100% 处。
  • :s/:substitute/:根据正则表达式替换当前块的内容,例如 s/foo/bar/gi,注意它支持正则修饰符。
  • :%s/:%substitute/:根据正则表达式替换当前页面的块,例如 %s/foo/bar/gi
  • :marks:显示标记。
  • :delm:delmarks:删除特定的标记 ID,例如 :delm 1 2 3
  • :delm!:delmarks!:删除所有标记。
  • :m:mark:跳转到特定的标记,例如 :m 1
  • :go:跳转到已存在的页面或块,例如 :go 2022-02-22:go ((6219c981-256a-4464-bc62-4ecfab4c2141))
    • 页面名称有一些快捷方式:
      • :go @:go @index:跳转到目录页面。
      • :go @today:跳转到今天的日志页面。
      • :go @yesterday:跳转到昨天的日志页面。
      • :go @tomorrow:跳转到明天的日志页面。
      • :go @prev:跳转到前一天的日志页面,如果当前页面不是日志页面,则回退到 @yesterday。
      • :go @next:跳转到下一天的日志页面,如果当前页面不是日志页面,则回退到 @tomorrow。
      • :go @back:跳转到后退页面。
      • :go @forward:跳转到前进页面。
    • :go!:跳转到已存在的页面或块,如果页面不存在则创建一个,例如 :go 2022-02-22:go ((6219c981-256a-4464-bc62-4ecfab4c2141))
    • :go!:go 支持 --ns--namespace,用于跳转或创建命名空间页面。例如,你在 test 页面上运行命令 :go! subpage --ns,则会被重定向到 test/subpage,从而节省输入前缀字符的时间。
  • :re:rename:重命名当前页面名称,如果目标页面存在,则合并页面内容。
  • :undo:redo:撤销和重做最后一次编辑。
  • :lorem:lorem-ipsum:在相同层级生成随机块,使用 --unit word|paragraph|sentence 改变随机块的单位。
    • --unit 有一个简写形式 -u
    • wordparagraphsentence 也有简写形式 wps
    • 同时支持 -p-s-w--paragraph--sentence--word
  • :emoji:通过搜索关键词插入表情符号,你可以在后面追加数字来重复表情符号。
  • :emoji-picker:通过表情符号界面插入表情符号。
  • :sortrsort:在不聚焦任何块的情况下对页面的第一层级块进行排序,或者在聚焦一个块的情况下对子层级块进行排序。
  • :bg [namedColor|hexColor]:设置块的背景颜色,支持多块选择。
  • :bg-picker:触发颜色选择器来选择块的背景颜色,支持多块选择。
  • :bg-random:随机设置块的背景颜色,支持多块选择。
  • :bg-clear:清除块的背景颜色,支持多块选择。
  • :copy-path:获取页面或日志的绝对路径,以便在 Logseq 之外进行编辑。
  • :open-in-vscode:在 VSCode 中打开页面或日志。
  • :w:write:保存当前页面,实际上这是一个假操作,因为 Logseq 会自动保存。
  • :wq:保存当前页面并退出 VIM 命令模式。
  • :q:quit:退出 VIM 命令模式。
  • hhelp:显示帮助信息弹窗。

大小写转换风格

  • 1:在大写和小写之间切换,这是默认行为。
  • 2:转换为大写。例如 LOGSEQ IS SO AWESOME
  • 3:转换为小写。例如 logseq is so awesome
  • 4:转换为标题大小写。例如 Logseq Is so Awesome
  • 5:转换为句子大小写。例如 Logseq is so awesome
  • 6:转换为路径大小写。例如 logseq/is/so/awesome
  • 7:转换为大写首字母。例如 Logseq Is So Awesome
  • 8:转换为常量大小写。例如 LOGSEQ_IS_SO_AWESOME
  • 9:转换为点分大小写。例如 logseq.is.so.awesome
  • 10:转换为标题大小写。例如 Logseq-Is-So-Awesome
  • 11:转换为参数大小写。例如 logseq-is-so-awesome
  • 12:转换为帕斯卡大小写。例如 LogseqIsSoAwesome
  • 13:转换为驼峰大小写。例如 logseqIsSoAwesome
  • 14:转换为蛇形大小写。例如 logseq_is_so_awesome
  • 15:转换为交换大小写。例如 lOGSEQ IS SO AWESOME
  • 16:转换为随机大小写。例如 logsEQ IS SO awESoME

标记功能说明

  • Logseq 已经有 FavoritesRecent 功能,我们还有一个 Tabs 插件,标记功能有点像 Tabs 的位置,但它让你自己决定哪个是哪个,这让我感觉很好。
  • 标记的页面和块可以自动持久化并单独保存。
  • NUMBER 可以大于 10,实际上如果你愿意,可以是数千。
  • m 快捷键可能会与 Markmap 插件冲突,所以如果你遇到这个问题,请将 Markmap 插件升级到最新版本。
  • NUMBER=1 是默认值,所以你可以直接按下 m 来保存,按下 ' 来加载标记 1。

本插件新增的斜杠命令

由于一些 VIM 快捷键或命令也需要作为斜杠命令使用,因此本插件提供了一些。

  • /Insert Emoji:在当前位置插入表情符号。
  • /Sort Blocks:对子层级的子块按 a 到 z 排序。
  • /Reverse Sort Blocks:对子层级的子块按 z 到 a 排序。
  • /Random Bg Color:设置块的背景颜色。
  • /Children Random Bg Color:设置子块的背景颜色。

命名背景颜色

:bg 命令中可以使用的命名颜色来自 这里

页面内搜索

与 VIM 类似,按下 / 可以触发页面内搜索,它支持智能大小写匹配,这意味着如果你用小写搜索,它将不区分大小写匹配;如果你搜索的关键词包含大写字母,它将区分大小写匹配。

其他说明

  • Logseq 的快捷键支持未来可能会发生变化,所以如果你需要,先用一段时间,它可能会与 Logseq 将来的快捷键冲突。
  • 这些快捷键并不完全与 VIM 的快捷键相同,只是模仿。
  • 如果你在日志主页上,一些快捷键会将你重定向到特定页面,因为目前没有 API 可以停留在日志主页并移动块的高亮行。
  • 目前有些快捷键还不够完美,可能需要进一步改进,并且需要 Logseq 团队的一些支持。
  • 可能很快会有更多快捷键推出。
  • 敬请期待。
  • 这里的复制并不意味着复制到系统剪贴板,只是在 Logseq 的内存中。
  • VIM 滚动到顶部的快捷键是 gg,如果你需要,你可以将 Logseq 的 gg 快捷键改为另一个,并在插件设置的 JSON 文件中设置 gg。
  • 一些快捷键支持类似 VIM 的组合操作,这意味着按下 N+action 可以执行 N 次操作。
  • 合并快捷键只能合并没有子块的兄弟块,并且在编辑模式下不应触发得太快。
  • 跳转到内部页面支持组合操作来选择要跳转的页面。
  • 所有操作都支持在设置 JSON 文件中进行多重键盘绑定。
  • mod 在 Mac 上表示 Cmd,在 Windows/Linux 上表示 Ctrl

如果你对这个插件感兴趣,可以去 Logseq 插件市场搜索使用。